MySQL(四) WHERE 子句
Table of Contents
使用 WHERE 子句
数据库表一般都包含了大量数据, 需要检索表中所有行的情况比较少见. 通常, 我们只需要检索满足某些条件的数据.
在 SELECT 语句中, 可以使用 WHERE 子句指定搜索条件, WHERE 子句需要放在 FROM 子句之后.
SELECT column_1, column_2 FROM table_name WHERE column_2=2.5;
这条语句的意思是, 从 table_name 中检索两个列, 但不返回所有行, 只返回 column_2 的值为 2.5 的行.
思考
SQL 的 SELECT 语句可以过滤数据, 而我们平时开发的应用程序, 也可以对数据进行过滤. 但我们一般会选择在数据库中对数据进行过滤, 原因有以下2点:
- 数据库进行了优化, 可以快速有效地对数据进行过滤; 如果由我们开发的应用程序进行过滤, 会极大影响应用的性能.
- 如果在我们开发的应用程序上进行过滤, 数据库必须发送多余的数据, 浪费资源.
WHERE 子句操作符
WHERE 子句支持的条件操作符
操作符 | 描述 |
---|---|
= | 等于 |
<> | 不等于 |
!= | 不等于 |
< | 小于 |
<= | 小于等于 |
> | 大于 |
>= | 大于等于 |
BETWEEN | 在指定的两个值之间 |
检查单个值
SELECT column_1, column_2 FROM table_name WHERE column_1 = 'fuse';
MySQL 在执行匹配时, 默认不区分大小写, 所以 fuse 和 Fuse 都会被匹配.
小于号 < 的例子:
SELECT column_1, column_2 FROM table_name WHERE column_2 < 10;
不等于操作符 <> 的例子:
SELECT column_1, column_2 FROM table_name WHERE column_1 <> 'fuse';
注意, SQL 语句中, 如果值的类型为字符串, 需要放在单引号之间. 如果是数值类型则不用.
范围操作符 BETWEEN 的例子:
SELECT column_1, column_2 FROM table_name WHERE column_2 BETWEEN 2.5 AND 10;
BETWEEN 关键字需要两个值, 并用 AND 关键字连起来. BETWEEN 匹配的值包括指定的开始值和结束值.
空值检查
NULL(空值) 与 0, 空字符串, 空格不同.
以下 SQL 语句可以检查出所有 column_2 为 NULL 的行:
SELECT column_1 FROM table_name WHERE column_2 IS NULL;
WHERE 子句组合
多个 WHERE 子句可以通过 AND 或 OR 连接起来. 如:
SELECT column_1, column_2 FROM table_name WHERE column_3 = 1003 AND column_4 <= 10;
如果有不止两个 WHERE 子句, 也是用 AND 将他们连接. AND 表示要满足所有给定条件的行.
OR 子句的用法一样, 但表达的意思不同, 意思是只要满足其中一个条件就可以.
AND 与 OR 的组合
SELECT column_1, column_2 FROM table_name WHERE column_3=1002 OR column_3=1003 AND column_2>=10;
由于 AND 的优先级会更高, 所以这一句的意思被认为是: 满足条件 column_3=1002 的数据, 或满足条件 column_2>=10 且 column_3=1003 的数据.
如果要改成满足条件 column_3=1002 或者 column_3=1003 并且 column_2>=10 的数据, 应该这么写:
SELECT column_1, column_2 FROM table_name WHERE (column_3=1002 OR column_3=1003) AND column_2>=10;
Generated by Emacs 25.x(Org mode 8.x)
Copyright © 2014 - Pinvon - Powered by EGO